package com.zhuangjie.idworker.properties;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.env.Environment;

@ConfigurationProperties(prefix = "snowflake")
@Data
@Slf4j
public class SnowflakeHelperProperties {
    /**
     * 模块名称，用于非单机模式同服务的交互
     */
    private String moduleName;
    /**
     * 是否单机模式
     */
    private boolean isStandaloneMode = false;
    /**
     * 机房编号(分机房部署需保证不同)
     */
    private int dateCenterId = 0;
    /**
     * 状态持有有效时间 （看门狗定时续时）
     * 默认三分钟（单位秒）
     */
    private int expirationTimeSeconds = 60*3;

    @Autowired
    public void configCheck(Environment environment) {
        if (moduleName == null) {
            String baseModuleName = environment.getProperty("spring.application.name");
            if (baseModuleName == null) {
                log.error("IdWorker：你必须在配置中声明模块名称`spring.application.name` .否则IdWorker当无法正常使用！");
                throw new RuntimeException("无法获取`spring.application.name`的值.");
            }
            // 非手动配置，使用`spring.application.name`作为模块名
            this.moduleName = baseModuleName;
        }
    }

}
